class DataStorage {
  // private data: string[];

  // 直接改成私有属性，就是你传递过来的值
  constructor(private data: string[]) {
    this.data = data;
  }

  add(item: string): void {
    if (this.exists(item)) return;
    this.data.push(item);
  }

  remove(item: string): void {
    this.data.splice(this.data.indexOf(item), 1);
  }

  getItems(): string[] {
    // ... 有浅拷贝的作用
    return [...this.data];
  }

  private exists(item: string): boolean {
    return this.data.indexOf(item) !== -1;
  }
}

const textStorage = new DataStorage(["John", "Jane"]);
textStorage.add("Jack");
textStorage.remove("John");
console.log(textStorage.getItems());

// textStorage.data // 设置成了私有属性，可以明显看到都没有任何提示了
